Data Collection

Experiment Softwares

Psychopy

PsychoPy is an free cross-platform package allowing you run a wide range of in the behavioral sciences (neuroscience, psychology, psychophysics, linguistics…). (Source: Psychopy website)

Psychopy: Task Builder And The Actual TaskPsychopy: Task Builder And The Actual Task

Psychopy: Task Builder And The Actual Task

  • Build your first PsychoPy experiment Link 

  • Build the Posner cueing task Link 

  • A series of tutorials for building a memory task Link 

  • Create basic components using the coder view link

  • Book: Building Experiments in PsychoPy (by Jonathan Peirce and Michael MacAskill) link

  • Book: Programming Visual Illusions for Everyone (by Marco Bertamini) link

  • Paper: PsychoPy2: Experiments in behavior made easy link

  • Get stuck? Ask your questions here

Online Platforms

Qualtrics

Qualtrics: Builder View And The Actual SurveyQualtrics: Builder View And The Actual Survey

Qualtrics: Builder View And The Actual Survey

  • Demo: A simple numeracy task link

  • A nice introduction to making a qualtrics survey link

  • Qualtrics Beginner Tutorial part 1 and part 2

  • And a more advanced Qualtrics tutorial link

Psychopy (PsychoJS)/Pavlovia

PsychoJS is a JavaScript library that makes it possible to run neuroscience, psychology, and psychophysics experiments in a browser. It is the online counterpart of the PsychoPy Python library (Source: PsychoJs repository). Pavlovia.org is a site created by the PsychoPy team to make it easy to run studies online, host your experiments, share studies with other scientists, and version control your work. (Source: Psychopy website)

  • Demo: The Posner task link

  • Upload your Psychopy experiment to Pavlovia link

  • Running your experiment on Pavlovia.org link

  • Paper: The timing mega-study: comparing a range of experiment generators, both lab-based and online link

  • Get stuck? Ask your questions here

Gorilla

The Gorilla Experiment Builder is a cloud based research platform that allows researchers and students to quickly and easily create and deploy behavioural (reaction-time) experiments online (Source: Gorilla website)

Gorilla: Task Builder And The Actual TaskGorilla: Task Builder And The Actual Task

Gorilla: Task Builder And The Actual Task

  • Demo: The dot-probe task link

  • Getting started with Gorilla link

  • Gorilla support page link

  • Gorilla Demos and Examples List link

  • Paper: Gorilla in our midst: An online behavioral experiment builder link

JsPsych

jsPsych is a JavaScript library for running behavioral experiments in a web browser. The library provides a flexible framework for building a wide range of laboratory-like experiments that can be run online (Source: jsPsych website)

  • Create a simple Reaction Time Task link

  • A more detailed tutorial on jsPsych and Google app engine link

  • Online linguistics experiments using jsPsych (Na-Young Ry, 2018) link

  • Paper: jsPsych: A JavaScript library for creating behavioral experiments in a Web browser link

Jaysire

The goal of jaysire is to provide a method for writing behavioural experiments in R that can be deployed through a web browser. The package relies on the jsPsych library by Josh de Leeuw (GitHub page) to create the experiments, and is structured so that functions in jaysire use the same argument names as the corresponding jsPsych functions. (Source: jaysire repository)

  • Demo: A choice reaction time task link

  • Create an online experiment using Jaysire part 1 part 2 part 3

  • Behavioural experiments with jaysire link

REDCap

REDCap is a secure web application for building and managing online surveys and databases. While REDCap can be used to collect virtually any type of data, it is specifically geared to support online or offline data capture for research studies and operations (Source: project-redcap.org)

Empirica

Empirica is an open-source JavaScript framework for running multiplayer interactive experiments and games in the browser. It was created to make it easy to develop and iterate on sophisticated designs in a statistically sound manner, and offers a unique combination of power, flexibility, and speed. (Source: empirica.ly)

  • Getting started with Empirica link

  • A series of tutorials for building a simple interactive task Link 

  • Using Empirica for high-throughput virtual lab experiments (an interesting experiment) Link 

Data Cleaning and Analysis

R

  • Book: R for data science link

  • Book: ggplot2: Elegant Graphics for Data Analysis link

  • Book: Fundamentals of Data Visualization link

  • Book: Learning statistics with R: A tutorial for psychology students and other beginners link

  • Book: R for Psychology link

  • Book: A Language, not a Letter: Learning Statistics in R link

  • Book: Foundations of Statistics with R link

  • Book: Statistical Rethinking with brms, ggplot2, and the tidyverse link

  • Course: Data Science: Foundations using R link

  • Example: Doing an Analysis of Variance (ANOVA) in R link

Python

  • Book: Python for Everybody: Exploring Data Using Python 3 link

  • Course; Python for Everybody Specialization link

  • Data Analysis in Python with Pandas link

  • Data Visualization in Python using Matplotlib link

  • Example: Doing an Analysis of Variance (ANOVA) in Python link

Reproducible Research

Until quite recently, making research open required a great deal of extra work for researchers and was less likely to be done. Now, with available tools, the benefits of openness can be a by-product of time-saving efficiencies, because tools that reduce data headaches also result in science that is more transparent, reproducible, collaborative and freely accessible to others.  (Lowndes et al., 2017)

*Source*: Our path to better science in less time using open data science tools

Source: Our path to better science in less time using open data science tools

Folder Structure

  • Setting up an Organised Folder Structure for Research Projects link

  • Transition your workflow, keep your sanity link

  • Organising Your Data link

  • 23 (research data) Things link

  • Project-oriented workflow link

Git

*Source*: [phdcomics.com](http://phdcomics.com/comics.php?f=1531)

Source: phdcomics.com

  • Happy Git and GitHub for the useR link

  • The Turing Way: Version Control link

  • Reproducible workflow and version control with Git and Github link

Rmarkdown and Jupyter Notebooks

R Markdown provides an authoring framework for data science. You can use a single R Markdown file to both save and execute code [and] generate high quality reports that can be shared with an audience R Markdown documents are fully reproducible and support dozens of static and dynamic output formats. (Source: rstudio.com)

  • How does an Rmarkdown file look like? link

  • How does a Jupyter notebook file look like? link

  • Rmarkdown - Introduction and Basics link

  • Reproducible analysis using R, Rmarkdown, and the tidyverse link

  • Using Jupyter notebooks for interactive analyses and reproducible science link

Data Sharing

Open Science Framework (OSF)

OSF is a free, open-source Web tool designed to help researchers collaboratively manage, store, and share their research process and files related to their research. (Source: Soderberg, 2018)

You can preregister a study, upload a preprint, and connect your Github repository, Goggle Drive, or oneDrive to your project.

  • A sample project link

  • An OSF beginner tutorial link

  • Paper: Using OSF to Share Data: A Step-by-Step Guide: link

Zenodo

Zenodo is a general-purpose open-access repository developed under the European OpenAIRE program and operated by CERN. It allows researchers to deposit data sets, research software, reports, and any other research related digital artifacts. For each submission, a persistent digital object identifier (DOI) is minted, which makes the stored items easily citeable. (Source: Wikipedia)

  • A sample project link

  • How to upload files to Zenodo file

LS0tCnRpdGxlOiAnPGRpdiBjbGFzcz0ianVtYm90cm9uIj48aDEgY2xhc3M9InRpdGxlIHRvYy1pZ25vcmUgZGlzcGxheS0zIj5IdW1hbiBEYXRhOiBGcm9tIEdhdGhlcmluZyB0byBTaGFyaW5nPC9oMT48L2Rpdj4nCmF1dGhvcjoKICAtIG5hbWU6ICJPbWlkIEdoYXNlbWkiCiAgICBlbWFpbDogb21pZHJlemEuZ2hhc2VtaUBoZHIubXEuZWR1LmF1CiAgICBhZmZpbGlhdGlvbjogRGVwYXJ0bWVudCBvZiBDb2duaXRpdmUgU2NpZW5jZSwgTWFjcXVhcmllIFVuaXZlcnNpdHkKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIsICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgICN0aGVtZTogc3BhY2VsYWIKICAgIHRoZW1lOiBkYXJrbHkKICAgIGhpZ2hsaWdodDoga2F0ZQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLmFsaWduPSJjZW50ZXIiKQprbml0cjo6b3B0c19jaHVuayRzZXQoZGV2ID0gInBuZyIsCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IEZBTFNFKQpgYGAKCmBgYHtyIHBhY2thZ2Vsb2FkLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkoInRpZHl2ZXJzZSIpCmBgYAoKCgoKPHN0eWxlPgphOnZpc2l0ZWQgewogIGNvbG9yOiBncmVlbjsKfQphOmhvdmVyIHsKICBjb2xvcjogaG90cGluazsKfQo8L3N0eWxlPgoKCgoKCgoKCgojIERhdGEgQ29sbGVjdGlvbgoKCgojIyBFeHBlcmltZW50IFNvZnR3YXJlcwoKCgojIyMgUHN5Y2hvcHkKCj5Qc3ljaG9QeSBpcyBhbiBmcmVlIGNyb3NzLXBsYXRmb3JtIHBhY2thZ2UgYWxsb3dpbmcgeW91IHJ1biBhIHdpZGUgcmFuZ2Ugb2YgaW4gdGhlIGJlaGF2aW9yYWwgc2NpZW5jZXMgKG5ldXJvc2NpZW5jZSwgcHN5Y2hvbG9neSwgcHN5Y2hvcGh5c2ljcywgbGluZ3Vpc3RpY3MuLi4pLiAKKFNvdXJjZTogW1BzeWNob3B5IHdlYnNpdGVdKGh0dHBzOi8vd3d3LnBzeWNob3B5Lm9yZy8pKQoKCmBgYHtyIGVjaG89Riwgb3V0LndpZHRoPSc0OSUnLCBvdXQuaGVpZ2h0PSIzMDBweCIsZmlnLmNhcD0iUHN5Y2hvcHk6IFRhc2sgQnVpbGRlciBBbmQgVGhlIEFjdHVhbCBUYXNrIixmaWcuc2hvdz0naG9sZCcsZmlnLmFsaWduPSdjZW50ZXInfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhjKGhlcmUoJ0lucHV0JywncHN5Y2hvcHkxLnBuZycpLGhlcmUoJ0lucHV0JywncHN5Y2hvcHk0LnBuZycpKSkKYGBgCgoKICAtIEJ1aWxkIHlvdXIgZmlyc3QgUHN5Y2hvUHkgZXhwZXJpbWVudCBbTGlua10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1WVjZxaHVRZ3NpSSZ0PTM1cylcIAoKICAtIEJ1aWxkIHRoZSBQb3NuZXIgY3VlaW5nIHRhc2sgW0xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WlFkMlFFS19HbjQpXCAKCiAgLSBBIHNlcmllcyBvZiB0dXRvcmlhbHMgZm9yIGJ1aWxkaW5nIGEgbWVtb3J5IHRhc2sgW0xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9OUJxUnl1dDJVWmspXCAKICAKICAtIENyZWF0ZSBiYXNpYyBjb21wb25lbnRzIHVzaW5nIHRoZSBjb2RlciB2aWV3IFtsaW5rXShodHRwczovL3d3dy5kam1hbm5pb24ubmV0L3BzeWNoX3Byb2dyYW1taW5nL3Zpc2lvbi9pbnRyby9pbnRyby5odG1sKQogIAogIC0gKkJvb2sqOiBCdWlsZGluZyBFeHBlcmltZW50cyBpbiBQc3ljaG9QeSAoYnkgSm9uYXRoYW4gUGVpcmNlIGFuZCBNaWNoYWVsIE1hY0Fza2lsbCkgW2xpbmtdKGh0dHBzOi8vd3d3LmFtYXpvbi5jb20uYXUvQnVpbGRpbmctRXhwZXJpbWVudHMtUHN5Y2hvUHktSm9uYXRoYW4tUGVpcmNlL2RwLzE0NzM5OTEzOTApCiAgCiAgLSAqQm9vayo6IFByb2dyYW1taW5nIFZpc3VhbCBJbGx1c2lvbnMgZm9yIEV2ZXJ5b25lIChieSBNYXJjbyBCZXJ0YW1pbmkpIFtsaW5rXShodHRwczovL3d3dy5hbWF6b24uY29tLmF1L1Byb2dyYW1taW5nLVZpc3VhbC1JbGx1c2lvbnMtRXZlcnlvbmUtQmVydGFtaW5pL2RwLzMzMTk2NDA2NTgpCiAgCiAgLSAqUGFwZXIqOiBQc3ljaG9QeTI6IEV4cGVyaW1lbnRzIGluIGJlaGF2aW9yIG1hZGUgZWFzeSBbbGlua10oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQvMzA3MzQyMDYpCiAgCiAgLSBHZXQgc3R1Y2s/IEFzayB5b3VyIHF1ZXN0aW9ucyBbaGVyZV0oaHR0cHM6Ly9kaXNjb3Vyc2UucHN5Y2hvcHkub3JnLykKCgoKIyMgT25saW5lIFBsYXRmb3JtcwoKIyMjIFF1YWx0cmljcwoKYGBge3IgZWNobz1GLCBvdXQud2lkdGg9JzQ5JScsIG91dC5oZWlnaHQ9IjMwMHB4IixmaWcuY2FwPSJRdWFsdHJpY3M6IEJ1aWxkZXIgVmlldyBBbmQgVGhlIEFjdHVhbCBTdXJ2ZXkiLGZpZy5zaG93PSdob2xkJyxmaWcuYWxpZ249J2NlbnRlcid9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGMoaGVyZSgnSW5wdXQnLCdxdWFsdHJpY3MxLnBuZycpLGhlcmUoJ0lucHV0JywncXVhbHRyaWNzMi5wbmcnKSkpCmBgYAoKCiAgLSBEZW1vOiBBIHNpbXBsZSBudW1lcmFjeSB0YXNrIFtsaW5rXShodHRwczovL21xZWR1LnF1YWx0cmljcy5jb20vamZlL2Zvcm0vU1ZfNEpEUHpWT3ZuSEhldWxUKQoKICAtIEEgbmljZSBpbnRyb2R1Y3Rpb24gdG8gbWFraW5nIGEgcXVhbHRyaWNzIHN1cnZleSBbbGlua10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj14a1NVS1RkRDFIcyZ0PTMwMHMpCgogIC0gUXVhbHRyaWNzIEJlZ2lubmVyIFR1dG9yaWFsIFtwYXJ0IDFdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9X2hTby1sZGoxOWspIGFuZCBbcGFydCAyXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PU1QNmpUY0hVXzV3JnQ9NjgycykKCiAgLSBBbmQgYSBtb3JlIGFkdmFuY2VkIFF1YWx0cmljcyB0dXRvcmlhbCBbbGlua10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1ZMS1qdEEtWGpGUSZ0PTIwMXMpCgoKIyMjIFBzeWNob3B5IChQc3ljaG9KUykvUGF2bG92aWEKCj5Qc3ljaG9KUyBpcyBhIEphdmFTY3JpcHQgbGlicmFyeSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJ1biBuZXVyb3NjaWVuY2UsIHBzeWNob2xvZ3ksIGFuZCBwc3ljaG9waHlzaWNzIGV4cGVyaW1lbnRzIGluIGEgYnJvd3Nlci4gSXQgaXMgdGhlIG9ubGluZSBjb3VudGVycGFydCBvZiB0aGUgUHN5Y2hvUHkgUHl0aG9uIGxpYnJhcnkgKFNvdXJjZTogW1BzeWNob0pzIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9wc3ljaG9weS9wc3ljaG9qcykpLiAqUGF2bG92aWEub3JnKiBpcyBhIHNpdGUgY3JlYXRlZCBieSB0aGUgUHN5Y2hvUHkgdGVhbSB0byBtYWtlIGl0IGVhc3kgdG8gcnVuIHN0dWRpZXMgb25saW5lLCBob3N0IHlvdXIgZXhwZXJpbWVudHMsIHNoYXJlIHN0dWRpZXMgd2l0aCBvdGhlciBzY2llbnRpc3RzLCBhbmQgdmVyc2lvbiBjb250cm9sIHlvdXIgd29yay4gCihTb3VyY2U6IFtQc3ljaG9weSB3ZWJzaXRlXShodHRwczovL3d3dy5wc3ljaG9weS5vcmcvb25saW5lL3VzaW5nUGF2bG92aWEuaHRtbCkpCgpgYGB7ciBlY2hvPUYsIG91dC53aWR0aD0nOTAlJ30Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZSgnSW5wdXQnLCdwc3ljaG9weTMucG5nJykpCmBgYAoKCiAgLSBEZW1vOiBUaGUgUG9zbmVyIHRhc2sgW2xpbmtdKGh0dHBzOi8vcnVuLnBhdmxvdmlhLm9yZy9kZW1vcy9wb3NuZXIvaHRtbC8pCgogIC0gVXBsb2FkIHlvdXIgUHN5Y2hvcHkgZXhwZXJpbWVudCB0byBQYXZsb3ZpYSBbbGlua10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1icHJZZUJ6a1VjOCZsaXN0PVBMcU9yYmRLV19XRlI4RUJCQ3IxcVBQT2VtejB3d0JrZ0UpCgogIC0gUnVubmluZyB5b3VyIGV4cGVyaW1lbnQgb24gUGF2bG92aWEub3JnIFtsaW5rXShodHRwczovL3d3dy5wc3ljaG9weS5vcmcvb25saW5lL3VzaW5nUGF2bG92aWEuaHRtbCkKCiAgLSAqUGFwZXIqOiBUaGUgdGltaW5nIG1lZ2Etc3R1ZHk6IGNvbXBhcmluZyBhIHJhbmdlIG9mIGV4cGVyaW1lbnQgZ2VuZXJhdG9ycywgYm90aCBsYWItYmFzZWQgYW5kIG9ubGluZSBbbGlua10oaHR0cHM6Ly9wc3lhcnhpdi5jb20vZDZudTUvKQoKICAtIEdldCBzdHVjaz8gQXNrIHlvdXIgcXVlc3Rpb25zIFtoZXJlXShodHRwczovL2Rpc2NvdXJzZS5wc3ljaG9weS5vcmcvKQoKCiMjIyBHb3JpbGxhCgo+VGhlIEdvcmlsbGEgRXhwZXJpbWVudCBCdWlsZGVyIGlzIGEgY2xvdWQgYmFzZWQgcmVzZWFyY2ggcGxhdGZvcm0gdGhhdCBhbGxvd3MgcmVzZWFyY2hlcnMgYW5kIHN0dWRlbnRzIHRvIHF1aWNrbHkgYW5kIGVhc2lseSBjcmVhdGUgYW5kIGRlcGxveSBiZWhhdmlvdXJhbCAocmVhY3Rpb24tdGltZSkgZXhwZXJpbWVudHMgb25saW5lIAooU291cmNlOiBbR29yaWxsYSB3ZWJzaXRlXShodHRwczovL2dvcmlsbGEuc2MvaW5mby9iZWhhdmlvdXJhbHJlc2VhcmNoKSkKCmBgYHtyIGVjaG89Riwgb3V0LndpZHRoPSc0OSUnLCBvdXQuaGVpZ2h0PSIzNTBweCIsZmlnLmNhcD0iR29yaWxsYTogVGFzayBCdWlsZGVyIEFuZCBUaGUgQWN0dWFsIFRhc2siLGZpZy5zaG93PSdob2xkJyxmaWcuYWxpZ249J2NlbnRlcid9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGMoaGVyZSgnSW5wdXQnLCdnb3JpbGxhMy5wbmcnKSxoZXJlKCdJbnB1dCcsJ2dvcmlsbGEyLnBuZycpKSkKCmBgYAoKCgogIC0gRGVtbzogVGhlIGRvdC1wcm9iZSB0YXNrIFtsaW5rXShodHRwczovL3Jlc2VhcmNoLnNjL3Rhc2svMTQxNjExOSkKCiAgLSBHZXR0aW5nIHN0YXJ0ZWQgd2l0aCBHb3JpbGxhIFtsaW5rXShodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsL1VDQm90NDVtV1dmLVZhM1BjV0pKWDY3dykKCiAgLSBHb3JpbGxhIHN1cHBvcnQgcGFnZSBbbGlua10oaHR0cHM6Ly9nb3JpbGxhLnNjL3N1cHBvcnQpCgogIC0gR29yaWxsYSBEZW1vcyBhbmQgRXhhbXBsZXMgTGlzdCBbbGlua10oaHR0cHM6Ly9nb3JpbGxhLnNjL3N1cHBvcnQvc2FtcGxlcykKCiAgLSAqUGFwZXIqOiBHb3JpbGxhIGluIG91ciBtaWRzdDogQW4gb25saW5lIGJlaGF2aW9yYWwgZXhwZXJpbWVudCBidWlsZGVyIFtsaW5rXShodHRwczovL2xpbmsuc3ByaW5nZXIuY29tL2FydGljbGUvMTAuMzc1OC9zMTM0MjgtMDE5LTAxMjM3LXgpCgoKIyMjIEpzUHN5Y2gKCmpzUHN5Y2ggaXMgYSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIHJ1bm5pbmcgYmVoYXZpb3JhbCBleHBlcmltZW50cyBpbiBhIHdlYiBicm93c2VyLiBUaGUgbGlicmFyeSBwcm92aWRlcyBhIGZsZXhpYmxlIGZyYW1ld29yayBmb3IgYnVpbGRpbmcgYSB3aWRlIHJhbmdlIG9mIGxhYm9yYXRvcnktbGlrZSBleHBlcmltZW50cyB0aGF0IGNhbiBiZSBydW4gb25saW5lIChTb3VyY2U6IFtqc1BzeWNoIHdlYnNpdGVdKGh0dHBzOi8vd3d3LmpzcHN5Y2gub3JnLykpCgogIC0gQ3JlYXRlIGEgc2ltcGxlIFJlYWN0aW9uIFRpbWUgVGFzayBbbGlua10oaHR0cHM6Ly93d3cuanNwc3ljaC5vcmcvdHV0b3JpYWxzL3J0LXRhc2svKQoKICAtIEEgbW9yZSBkZXRhaWxlZCB0dXRvcmlhbCBvbiBqc1BzeWNoIGFuZCBHb29nbGUgYXBwIGVuZ2luZSBbbGlua10oaHR0cDovL2Njc3MuZGpuYXZhcnJvLm5ldC90YWxrcy8yMDE3L1VOU1dDQ1NfYnJvd3Nlci5wZGYpCgogIC0gT25saW5lIGxpbmd1aXN0aWNzIGV4cGVyaW1lbnRzIHVzaW5nIGpzUHN5Y2ggKE5hLVlvdW5nIFJ5LCAyMDE4KSBbbGlua10oaHR0cDovL2luZGl2aWR1YWwudXRvcm9udG8uY2EvcnJybm55L29ubGluZS5odG1sKQoKICAtICpQYXBlcio6IGpzUHN5Y2g6IEEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBjcmVhdGluZyBiZWhhdmlvcmFsIGV4cGVyaW1lbnRzIGluIGEgV2ViIGJyb3dzZXIgW2xpbmtdKGh0dHBzOi8vbGluay5zcHJpbmdlci5jb20vYXJ0aWNsZS8xMC4zNzU4L3MxMzQyOC0wMTQtMDQ1OC15KQoKCgojIyMgSmF5c2lyZQoKPlRoZSBnb2FsIG9mIGpheXNpcmUgaXMgdG8gcHJvdmlkZSBhIG1ldGhvZCBmb3Igd3JpdGluZyBiZWhhdmlvdXJhbCBleHBlcmltZW50cyBpbiBSIHRoYXQgY2FuIGJlIGRlcGxveWVkIHRocm91Z2ggYSB3ZWIgYnJvd3Nlci4gVGhlIHBhY2thZ2UgcmVsaWVzIG9uIHRoZSBqc1BzeWNoIGxpYnJhcnkgYnkgSm9zaCBkZSBMZWV1dyAoR2l0SHViIHBhZ2UpIHRvIGNyZWF0ZSB0aGUgZXhwZXJpbWVudHMsIGFuZCBpcyBzdHJ1Y3R1cmVkIHNvIHRoYXQgZnVuY3Rpb25zIGluIGpheXNpcmUgdXNlIHRoZSBzYW1lIGFyZ3VtZW50IG5hbWVzIGFzIHRoZSBjb3JyZXNwb25kaW5nIGpzUHN5Y2ggZnVuY3Rpb25zLiAKKFNvdXJjZTogW2pheXNpcmUgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2RqbmF2YXJyby9qYXlzaXJlKSkKCgogIC0gRGVtbzogQSBjaG9pY2UgcmVhY3Rpb24gdGltZSB0YXNrIFtsaW5rXShodHRwOi8vamF5c2lyZS5kam5hdmFycm8ubmV0L2RlbW9zL2V4YW1wbGUwOC9leHBlcmltZW50L2luZGV4Lmh0bWwpCgogIC0gQ3JlYXRlIGFuIG9ubGluZSBleHBlcmltZW50IHVzaW5nIEpheXNpcmUgW3BhcnQgMV0oaHR0cHM6Ly9jc2tlbXAuZ2l0aHViLmlvL2NoZHNzMjAxOV9jb250ZW50L2RheTIvc2xpZGVzLzEtZXhwZXJpbWVudC1tb3RpdmF0aW9uLWhhbmRvdXQucGRmKSBbcGFydCAyXShodHRwczovL2Nza2VtcC5naXRodWIuaW8vY2hkc3MyMDE5X2NvbnRlbnQvZGF5Mi9zbGlkZXMvMy10ZW1wbGF0ZS1leHBlcmltZW50LWhhbmRvdXQucGRmKSBbcGFydCAzXShodHRwczovL2Nza2VtcC5naXRodWIuaW8vY2hkc3MyMDE5X2NvbnRlbnQvZGF5Mi9zbGlkZXMvNC1tb3JlLWNvbXBsZXgtZXhwZXJpbWVudHMtaGFuZG91dC5wZGYpCgogIC0gQmVoYXZpb3VyYWwgZXhwZXJpbWVudHMgd2l0aCBqYXlzaXJlIFtsaW5rXShodHRwczovL2dpdGh1Yi5jb20vT21pZEdoYXNlbWkyMS9qYXlzaXJlKQoKCiMjIyBSRURDYXAKPlJFRENhcCBpcyBhIHNlY3VyZSB3ZWIgYXBwbGljYXRpb24gZm9yIGJ1aWxkaW5nIGFuZCBtYW5hZ2luZyBvbmxpbmUgc3VydmV5cyBhbmQgZGF0YWJhc2VzLiBXaGlsZSBSRURDYXAgY2FuIGJlIHVzZWQgdG8gY29sbGVjdCB2aXJ0dWFsbHkgYW55IHR5cGUgb2YgZGF0YSwgaXQgaXMgc3BlY2lmaWNhbGx5IGdlYXJlZCB0byBzdXBwb3J0IG9ubGluZSBvciBvZmZsaW5lIGRhdGEgY2FwdHVyZSBmb3IgcmVzZWFyY2ggc3R1ZGllcyBhbmQgb3BlcmF0aW9ucyAKKFNvdXJjZTogW3Byb2plY3QtcmVkY2FwLm9yZ10oaHR0cHM6Ly93d3cucHJvamVjdC1yZWRjYXAub3JnLykpCgoKIyMjIEVtcGlyaWNhCj4gRW1waXJpY2EgaXMgYW4gb3Blbi1zb3VyY2UgSmF2YVNjcmlwdCBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgbXVsdGlwbGF5ZXIgaW50ZXJhY3RpdmUgZXhwZXJpbWVudHMgYW5kIGdhbWVzIGluIHRoZSBicm93c2VyLiBJdCB3YXMgY3JlYXRlZCB0byBtYWtlIGl0IGVhc3kgdG8gZGV2ZWxvcCBhbmQgaXRlcmF0ZSBvbiBzb3BoaXN0aWNhdGVkIGRlc2lnbnMgaW4gYSBzdGF0aXN0aWNhbGx5IHNvdW5kIG1hbm5lciwgYW5kIG9mZmVycyBhIHVuaXF1ZSBjb21iaW5hdGlvbiBvZiBwb3dlciwgZmxleGliaWxpdHksIGFuZCBzcGVlZC4gCihTb3VyY2U6IFtlbXBpcmljYS5seV0oaHR0cHM6Ly9lbXBpcmljYS5seS8pKQoKYGBge3IgZWNobz1GLCBvdXQud2lkdGg9JzcwJSd9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmUoJ0lucHV0JywnZW1waXJpY2ExLnBuZycpKQpgYGAKCgogIC0gR2V0dGluZyBzdGFydGVkIHdpdGggRW1waXJpY2EgW2xpbmtdKGh0dHBzOi8vZW1waXJpY2EubHkvZG9jcy9xdWljay1zdGFydC5odG1sKQogIAogIC0gQSBzZXJpZXMgb2YgdHV0b3JpYWxzIGZvciBidWlsZGluZyBhIHNpbXBsZSBpbnRlcmFjdGl2ZSB0YXNrIFtMaW5rXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUsyWWhFWmV5XzU4Jmxpc3Q9UExQUWVsdlV3eVZnaWF3QkRrM1NwNzRRTWZMOFJQZ09SVylcIAogIAogIC0gVXNpbmcgRW1waXJpY2EgZm9yIGhpZ2gtdGhyb3VnaHB1dCB2aXJ0dWFsIGxhYiBleHBlcmltZW50cyAoYW4gaW50ZXJlc3RpbmcgZXhwZXJpbWVudCkgW0xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TkdCRGdWV3AwamMmZmVhdHVyZT1lbWJfdGl0bGUpXCAKICAKIyBEYXRhIENsZWFuaW5nIGFuZCBBbmFseXNpcwoKIyMgUgoKICAtIEJvb2s6IFIgZm9yIGRhdGEgc2NpZW5jZSBbbGlua10oaHR0cHM6Ly9yNGRzLmhhZC5jby5uei9pbmRleC5odG1sKQoKICAtIEJvb2s6IGdncGxvdDI6IEVsZWdhbnQgR3JhcGhpY3MgZm9yIERhdGEgQW5hbHlzaXMgW2xpbmtdKGh0dHBzOi8vZ2dwbG90Mi1ib29rLm9yZy9pbmRleC5odG0pCgogIC0gQm9vazogRnVuZGFtZW50YWxzIG9mIERhdGEgVmlzdWFsaXphdGlvbiBbbGlua10oRnVuZGFtZW50YWxzIG9mIERhdGEgVmlzdWFsaXphdGlvbikKCiAgLSBCb29rOiBMZWFybmluZyBzdGF0aXN0aWNzIHdpdGggUjogQSB0dXRvcmlhbCBmb3IgcHN5Y2hvbG9neSBzdHVkZW50cyBhbmQgb3RoZXIgYmVnaW5uZXJzIFtsaW5rXShodHRwczovL2xlYXJuaW5nc3RhdGlzdGljc3dpdGhyLmNvbS9ib29rLykKCiAgLSBCb29rOiBSIGZvciBQc3ljaG9sb2d5IFtsaW5rXShodHRwczovL2dsZW5ud2lsbGlhbXMubWUvcjRwc3ljaC8pCgogIC0gQm9vazogQSBMYW5ndWFnZSwgbm90IGEgTGV0dGVyOiBMZWFybmluZyBTdGF0aXN0aWNzIGluIFIgW2xpbmtdKGh0dHBzOi8vYWRlbW9zLnBlb3BsZS51aWMuZWR1L2luZGV4Lmh0bWwpCgogIC0gQm9vazogRm91bmRhdGlvbnMgb2YgU3RhdGlzdGljcyB3aXRoIFIgW2xpbmtdKGh0dHBzOi8vbWF0aHN0YXQuc2x1LmVkdS9+c3BlZWdsZS9fYm9vay9wcmVmYWNlLmh0bWwpCgogIC0gQm9vazogU3RhdGlzdGljYWwgUmV0aGlua2luZyB3aXRoIGJybXMsIGdncGxvdDIsIGFuZCB0aGUgdGlkeXZlcnNlIFtsaW5rXShodHRwczovL2Jvb2tkb3duLm9yZy9hamt1cnovU3RhdGlzdGljYWxfUmV0aGlua2luZ19yZWNvZGVkLykKCiAgLSBDb3Vyc2U6IERhdGEgU2NpZW5jZTogRm91bmRhdGlvbnMgdXNpbmcgUiBbbGlua10oaHR0cHM6Ly93d3cuY291cnNlcmEub3JnL3NwZWNpYWxpemF0aW9ucy9kYXRhLXNjaWVuY2UtZm91bmRhdGlvbnMtciNjb3Vyc2VzKQoKICAtIEV4YW1wbGU6IERvaW5nIGFuIEFuYWx5c2lzIG9mIFZhcmlhbmNlIChBTk9WQSkgaW4gUiBbbGlua10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2FmZXgvdmlnbmV0dGVzL2FmZXhfYW5vdmFfZXhhbXBsZS5odG1sKQoKCiMjIFB5dGhvbgoKICAtIEJvb2s6IFB5dGhvbiBmb3IgRXZlcnlib2R5OiBFeHBsb3JpbmcgRGF0YSBVc2luZyBQeXRob24gMyBbbGlua10oaHR0cDovL2RvMS5kci1jaHVjay5jb20vcHl0aG9ubGVhcm4vRU5fdXMvcHl0aG9ubGVhcm4ucGRmKQoKICAtIENvdXJzZTsgUHl0aG9uIGZvciBFdmVyeWJvZHkgU3BlY2lhbGl6YXRpb24gW2xpbmtdKGh0dHBzOi8vd3d3LmNvdXJzZXJhLm9yZy9zcGVjaWFsaXphdGlvbnMvcHl0aG9uI2NvdXJzZXMpCgogIC0gRGF0YSBBbmFseXNpcyBpbiBQeXRob24gd2l0aCBQYW5kYXMgW2xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eXpJTWlyY0dVNUkmbGlzdD1QTDUtZGEzcUdCNUlDQ3NnVzFNeGxaMEhxOExMNVUzdTl5KQoKICAtIERhdGEgVmlzdWFsaXphdGlvbiBpbiBQeXRob24gdXNpbmcgTWF0cGxvdGxpYiBbbGlua10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1VTzk4bEpRM1FHSSZsaXN0PVBMLW9zaUU4MFRlVHZpcE9xb21WRWVaMUhScmNFdnRaQl8pCgogIC0gRXhhbXBsZTogRG9pbmcgYW4gQW5hbHlzaXMgb2YgVmFyaWFuY2UgKEFOT1ZBKSBpbiBQeXRob24gW2xpbmtdKGh0dHBzOi8vcmVuZXNoYmVkcmUuZ2l0aHViLmlvL2Jsb2cvYW5vdmEuaHRtbCkKCgojIFJlcHJvZHVjaWJsZSBSZXNlYXJjaAoKPiBVbnRpbCBxdWl0ZSByZWNlbnRseSwgbWFraW5nIHJlc2VhcmNoIG9wZW4gcmVxdWlyZWQgYSBncmVhdCBkZWFsIG9mIGV4dHJhIHdvcmsgZm9yIHJlc2VhcmNoZXJzIGFuZCB3YXMgbGVzcyBsaWtlbHkgdG8gYmUgZG9uZS4gTm93LCB3aXRoIGF2YWlsYWJsZSB0b29scywgdGhlIGJlbmVmaXRzIG9mIG9wZW5uZXNzIGNhbiBiZSBhIGJ5LXByb2R1Y3Qgb2YgdGltZS1zYXZpbmcgZWZmaWNpZW5jaWVzLCBiZWNhdXNlIHRvb2xzIHRoYXQgcmVkdWNlIGRhdGEgaGVhZGFjaGVzIGFsc28gcmVzdWx0IGluIHNjaWVuY2UgdGhhdCBpcyBtb3JlIHRyYW5zcGFyZW50LCByZXByb2R1Y2libGUsIGNvbGxhYm9yYXRpdmUgYW5kIGZyZWVseSBhY2Nlc3NpYmxlIHRvIG90aGVycy5cIAoqKFtMb3duZGVzIGV0IGFsLiwgMjAxN10oaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9zNDE1NTktMDE3LTAxNjApKSoKCmBgYHtyIGVjaG89Riwgb3V0LndpZHRoPSc2MCUnLCBmaWcuY2FwPSIqU291cmNlKjogT3VyIHBhdGggdG8gYmV0dGVyIHNjaWVuY2UgaW4gbGVzcyB0aW1lIHVzaW5nIG9wZW4gZGF0YSBzY2llbmNlIHRvb2xzIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZSgnSW5wdXQnLCdyZXBfcmVzMS5wbmcnKSkKYGBgCgoKICAtICoqRkFJUioqIFByaW5jaXBsZXM6CgogICAgLSAqRmluZGFibGUqCgogICAgLSAqQWNjZXNzaWJsZSoKCiAgICAtICpJbnRlcm9wZXJhYmxlKgogIAogICAgLSAqUmV1c2FibGUqCgogLSBUaGUgRkFJUiBHdWlkaW5nIFByaW5jaXBsZXMgZm9yIHNjaWVudGlmaWMgZGF0YSBtYW5hZ2VtZW50IGFuZCBzdGV3YXJkc2hpcCBbbGlua10oaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9zZGF0YTIwMTYxOCkKCgoKIyMjIEZvbGRlciBTdHJ1Y3R1cmUKCmBgYHtyIGVjaG89Riwgb3V0LndpZHRoPScxMjAlJ30Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZSgnSW5wdXQnLCdmb2xkZXJfc3RydWM1LnBuZycpKQpgYGAKCgogIC0gU2V0dGluZyB1cCBhbiBPcmdhbmlzZWQgRm9sZGVyIFN0cnVjdHVyZSBmb3IgUmVzZWFyY2ggUHJvamVjdHMgW2xpbmtdKGh0dHA6Ly9uaWtvbGEubWUvZm9sZGVyX3N0cnVjdHVyZS5odG1sKQogIAogIC0gVHJhbnNpdGlvbiB5b3VyIHdvcmtmbG93LCBrZWVwIHlvdXIgc2FuaXR5IFtsaW5rXShodHRwczovL3NsaWRlcy5jb20vZGpuYXZhcnJvL3dvcmtmbG93Iy8pCgogIC0gT3JnYW5pc2luZyBZb3VyIERhdGEgW2xpbmtdKGh0dHBzOi8vd3d3LmRhdGEuY2FtLmFjLnVrL2RhdGEtbWFuYWdlbWVudC1ndWlkZS9vcmdhbmlzaW5nLXlvdXItZGF0YSkKICAKICAtIDIzIChyZXNlYXJjaCBkYXRhKSBUaGluZ3MgW2xpbmtdKGh0dHBzOi8vd3d3LmFuZHMub3JnLmF1L3dvcmtpbmctd2l0aC1kYXRhL3NraWxscy8yMy1yZXNlYXJjaC1kYXRhLXRoaW5ncy9hbGwyMykKCiAgLSBQcm9qZWN0LW9yaWVudGVkIHdvcmtmbG93IFtsaW5rXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnL2Jsb2cvMjAxNy8xMi93b3JrZmxvdy12cy1zY3JpcHQvKQoKIyMjIEdpdAoKYGBge3IgZWNobz1GLCBvdXQud2lkdGg9JzUwJScsIGZpZy5jYXA9IipTb3VyY2UqOiBbcGhkY29taWNzLmNvbV0oaHR0cDovL3BoZGNvbWljcy5jb20vY29taWNzLnBocD9mPTE1MzEpIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZSgnSW5wdXQnLCdnaXQxLmdpZicpKQpgYGAKCiAgLSBIYXBweSBHaXQgYW5kIEdpdEh1YiBmb3IgdGhlIHVzZVIgW2xpbmtdKGh0dHBzOi8vaGFwcHlnaXR3aXRoci5jb20vaW5kZXguaHRtbCkKCiAgLSBUaGUgVHVyaW5nIFdheTogVmVyc2lvbiBDb250cm9sIFtsaW5rXShodHRwczovL3RoZS10dXJpbmctd2F5Lm5ldGxpZnkuYXBwL3ZlcnNpb25fY29udHJvbC92ZXJzaW9uX2NvbnRyb2wuaHRtbCkKICAKICAtIFJlcHJvZHVjaWJsZSB3b3JrZmxvdyBhbmQgdmVyc2lvbiBjb250cm9sIHdpdGggR2l0IGFuZCBHaXRodWIgW2xpbmtdKGh0dHBzOi8vanVsZXMzMi5naXRodWIuaW8vMjAxNi0wNy0xMi1PeGZvcmQvZ2l0LykKICAgIAoKCgoKIyMjIFJtYXJrZG93biBhbmQgSnVweXRlciBOb3RlYm9va3MKCj5SIE1hcmtkb3duIHByb3ZpZGVzIGFuIGF1dGhvcmluZyBmcmFtZXdvcmsgZm9yIGRhdGEgc2NpZW5jZS4gWW91IGNhbiB1c2UgYSBzaW5nbGUgUiBNYXJrZG93biBmaWxlIHRvIGJvdGgKc2F2ZSBhbmQgZXhlY3V0ZSBjb2RlIApbYW5kXSBnZW5lcmF0ZSBoaWdoIHF1YWxpdHkgcmVwb3J0cyB0aGF0IGNhbiBiZSBzaGFyZWQgd2l0aCBhbiBhdWRpZW5jZQpSIE1hcmtkb3duIGRvY3VtZW50cyBhcmUgZnVsbHkgcmVwcm9kdWNpYmxlIGFuZCBzdXBwb3J0IGRvemVucyBvZiBzdGF0aWMgYW5kIGR5bmFtaWMgb3V0cHV0IGZvcm1hdHMuCihTb3VyY2U6IFtyc3R1ZGlvLmNvbV0oaHR0cHM6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20vbGVzc29uLTEuaHRtbCkpIAoKICAtIEhvdyBkb2VzIGFuIFJtYXJrZG93biBmaWxlIGxvb2sgbGlrZT8gW2xpbmtdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9lbW1lYW5zL3ZpZ25ldHRlcy9iYXNpY3MuaHRtbCNiYWNrc3RvcnkpCiAgCiAgLSBIb3cgZG9lcyBhIEp1cHl0ZXIgbm90ZWJvb2sgZmlsZSBsb29rIGxpa2U/IFtsaW5rXShodHRwczovL29zZi5pby85YzdiMy8pCgogIC0gUm1hcmtkb3duIC0gSW50cm9kdWN0aW9uIGFuZCBCYXNpY3MgW2xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9dEtVdWZ6cG9IREUmdD03OTZzKQogIAogIC0gUmVwcm9kdWNpYmxlIGFuYWx5c2lzIHVzaW5nIFIsIFJtYXJrZG93biwgYW5kIHRoZSB0aWR5dmVyc2UgW2xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cXZQREU0cHBBbnMmbGlzdD1QTEtXMkF6azIzWnRTT1VuTGFmRW4wVzFGRWYtUnctOHBpJmluZGV4PTMmdD04ODczcykKICAKICAtIFVzaW5nIEp1cHl0ZXIgbm90ZWJvb2tzIGZvciBpbnRlcmFjdGl2ZSBhbmFseXNlcyBhbmQgcmVwcm9kdWNpYmxlIHNjaWVuY2UgW2xpbmtdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9OWp4aVVsNFI4SU0mbGlzdD1QTEtXMkF6azIzWnRTT1VuTGFmRW4wVzFGRWYtUnctOHBpJmluZGV4PTImdD02Mjk2cykgCgoKCiMgRGF0YSBTaGFyaW5nCgoKIyMgT3BlbiBTY2llbmNlIEZyYW1ld29yayAoT1NGKQoKPk9TRiBpcyBhIGZyZWUsIG9wZW4tc291cmNlIFdlYiB0b29sIGRlc2lnbmVkIHRvIGhlbHAgcmVzZWFyY2hlcnMgY29sbGFib3JhdGl2ZWx5IG1hbmFnZSwgc3RvcmUsIGFuZCBzaGFyZSB0aGVpciByZXNlYXJjaCBwcm9jZXNzIGFuZCBmaWxlcyByZWxhdGVkIHRvIHRoZWlyIHJlc2VhcmNoLiAKKFNvdXJjZTogW1NvZGVyYmVyZywgMjAxOF0oaHR0cHM6Ly9qb3VybmFscy5zYWdlcHViLmNvbS9kb2kvZnVsbC8xMC4xMTc3LzI1MTUyNDU5MTg3NTc2ODkpKSAKCllvdSBjYW4gW3ByZXJlZ2lzdGVyXShodHRwczovL2hlbHAub3NmLmlvL2hjL2VuLXVzL2FydGljbGVzLzM2MDAxOTkzMDg5My1SZWdpc3Rlci1Zb3VyLVByb2plY3QpIGEgc3R1ZHksIHVwbG9hZCBhIFtwcmVwcmludF0oaHR0cHM6Ly9oZWxwLm9zZi5pby9oYy9lbi11cy9hcnRpY2xlcy8zNjAwMTk5MzA1MzMtVXBsb2FkLWEtUHJlcHJpbnQpLCBhbmQgY29ubmVjdCB5b3VyIFtHaXRodWJdKGh0dHBzOi8vaGVscC5vc2YuaW8vaGMvZW4tdXMvYXJ0aWNsZXMvMzYwMDE5OTI5ODEzLUNvbm5lY3QtR2l0SHViLXRvLWEtUHJvamVjdCkgcmVwb3NpdG9yeSwgW0dvZ2dsZSBEcml2ZV0oaHR0cHM6Ly9oZWxwLm9zZi5pby9oYy9lbi11cy9hcnRpY2xlcy8zNjAwMTk3MzczNzQtQ29ubmVjdC1Hb29nbGUtRHJpdmUtdG8tYS1Qcm9qZWN0KSwgb3IgW29uZURyaXZlXShodHRwczovL2hlbHAub3NmLmlvL2hjL2VuLXVzL2FydGljbGVzLzM2MDAxOTkyOTg3My1Db25uZWN0LU9uZURyaXZlLXRvLWEtUHJvamVjdCkgdG8geW91ciBwcm9qZWN0LgoKCiAgLSBBIHNhbXBsZSBwcm9qZWN0IFtsaW5rXShodHRwczovL29zZi5pby9lc3hjNC8pCgogIC0gQW4gT1NGIGJlZ2lubmVyIHR1dG9yaWFsIFtsaW5rXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PWRMRUloSkVTSVFBJnQ9MThzKQoKICAtICpQYXBlcio6IFVzaW5nIE9TRiB0byBTaGFyZSBEYXRhOiBBIFN0ZXAtYnktU3RlcCBHdWlkZTogW2xpbmtdKGh0dHBzOi8vam91cm5hbHMuc2FnZXB1Yi5jb20vZG9pL2Z1bGwvMTAuMTE3Ny8yNTE1MjQ1OTE4NzU3Njg5KQoKCiMjIFplbm9kbwoKPlplbm9kbyBpcyBhIGdlbmVyYWwtcHVycG9zZSBvcGVuLWFjY2VzcyByZXBvc2l0b3J5IGRldmVsb3BlZCB1bmRlciB0aGUgRXVyb3BlYW4gT3BlbkFJUkUgcHJvZ3JhbSBhbmQgb3BlcmF0ZWQgYnkgQ0VSTi4gSXQgYWxsb3dzIHJlc2VhcmNoZXJzIHRvIGRlcG9zaXQgZGF0YSBzZXRzLCByZXNlYXJjaCBzb2Z0d2FyZSwgcmVwb3J0cywgYW5kIGFueSBvdGhlciByZXNlYXJjaCByZWxhdGVkIGRpZ2l0YWwgYXJ0aWZhY3RzLiBGb3IgZWFjaCBzdWJtaXNzaW9uLCBhIHBlcnNpc3RlbnQgZGlnaXRhbCBvYmplY3QgaWRlbnRpZmllciAoRE9JKSBpcyBtaW50ZWQsIHdoaWNoIG1ha2VzIHRoZSBzdG9yZWQgaXRlbXMgZWFzaWx5IGNpdGVhYmxlLiAKKFNvdXJjZTogW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWmVub2RvKSkKCiAgLSBBIHNhbXBsZSBwcm9qZWN0IFtsaW5rXShodHRwczovL3plbm9kby5vcmcvcmVjb3JkLzM4MjE5OTAjLlhzSmcySk16WThZKQoKICAtIEhvdyB0byB1cGxvYWQgZmlsZXMgdG8gWmVub2RvIFtmaWxlXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUk0S2E5NTNKZVlFJnQ9MnMpCgo=